package com.enjoyor.soa.traffic.api.service.dubbo.bigdata;

import com.enjoyor.soa.traffic.util.pojo.ResultPojo;

import java.util.Date;

public interface DubboFlowTrendService {
    /**
     * 卡口流量最高top10 或 卡口流量最低top10 (topOrDown  1 代表top  0 代表 down)
     *
     * @param startDay
     * @param endDay
     * @param topOrDown
     * @return List<FFRKakouFlowDto>
     */
    public ResultPojo KakouFlowTopOrDown10(String token, Date startDay, Date endDay, int topOrDown);

    /**
     * 特定卡口流量趋势统计  时间粒度小时
     *
     * @param startDay
     * @param endDay
     * @param pointId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KaKouFlowTrendStatisticsByHour(String token, Date startDay, Date endDay, String pointId);

    /**
     * 特定卡口流量趋势统计  时间粒度天
     *
     * @param startDay
     * @param endDay
     * @param pointId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KaKouFlowTrendStatisticsByDay(String token, Date startDay, Date endDay, String pointId);

    /**
     * 特定卡口流量趋势统计  时间粒度月
     *
     * @param startDay
     * @param endDay
     * @param pointId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KaKouFlowTrendStatisticsByMonth(String token, Date startDay, Date endDay, String pointId);

    /**
     * 卡口流量涨幅最高top10 或 卡口流量涨幅最低top10 (riseOrFall  1 代表rise涨  0 代表 fall降)
     *
     * @param startDay
     * @param endDay
     * @param riseOrFall
     * @return List<FFRKakouFlowRiseFallDto>
     */
    public ResultPojo KaKouFlowRiseAndFallAnalysis(String token, Date startDay, Date endDay, int riseOrFall);

    /**
     * 重点路段趋势分析   时间粒度为小时
     *
     * @param startDay
     * @param endDay
     * @param roadId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo keyRoadTrendAnalysisByHour(String token, Date startDay, Date endDay, String roadId);

    /**
     * 重点路段趋势分析   时间粒度为天
     *
     * @param startDay
     * @param endDay
     * @param roadId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KeyRoadTrendAnalysisByDay(String token, Date startDay, Date endDay, String roadId);

    /**
     * 重点路段趋势分析   时间粒度为月
     *
     * @param startDay
     * @param endDay
     * @param roadId
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KeyRoadTrendAnalysisByMonth(String token, Date startDay, Date endDay, String roadId);

    /**
     * 重点路段早晚高峰查询   timeSign  0 代表早高峰    1 代表晚高峰
     *
     * @param startDay
     * @param endDay
     * @param roadId
     * @param timeSign
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KeyRoadFlowPeak(String token, Date startDay, Date endDay, String roadId, String timeSign);

    /**
     * 重点区域流量趋势分析   时间粒度为小时
     *
     * @param startDay
     * @param endDay
     * @param areaId
     * @return List<FFRAreaTimeFlowDto>
     */
    public ResultPojo KeyAreaFlowTrendAnalysisByHour(String token, Date startDay, Date endDay, String areaId);

    /**
     * 重点区域流量趋势分析   时间粒度为天
     *
     * @param startDay
     * @param endDay
     * @param areaId
     * @return List<FFRAreaTimeFlowDto>
     */
    public ResultPojo KeyAreaFlowTrendAnalysisByDay(String token, Date startDay, Date endDay, String areaId);

    /**
     * 重点区域流量趋势分析   时间粒度为月
     *
     * @param startDay
     * @param endDay
     * @param areaId
     * @return List<FFRAreaTimeFlowDto>
     */
    public ResultPojo KeyAreaFlowTrendAnalysisByMonth(String token, Date startDay, Date endDay, String areaId);

    /**
     * 重点区域早晚高峰查询  时间粒度是天  timeSign 0 代表早高峰  1 代表晚高峰
     *
     * @param startDay
     * @param endDay
     * @param areaId
     * @param timeSign
     * @return List<FFRTimeFlowDto>
     */
    public ResultPojo KeyAreaFlowPeak(String token, Date startDay, Date endDay, String areaId, String timeSign);


/////////////////////天气流量分析：begin//////

    /**
     * 天气流量分析-按路段查询
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param roadId   路段ID
     * @return List &lt; WeatherFlowDto &gt;
     */
    public ResultPojo weatherKeyRoadTrendAnalysisByDay(String token, Date startDay, Date endDay, String weather, String roadId);

    /**
     * 天气流量分析-按区域查询
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param areaId   区域ID
     * @return List &lt; WeatherFlowDto &gt;
     */
    public ResultPojo weatherKeyAreaFlowTrendAnalysisByDay(String token, Date startDay, Date endDay, String weather, String areaId);


    /**
     * 天气流量分析-按天气统计天数
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @return List &lt; WeatherFlowDto &gt;
     */
    public ResultPojo statDayByWeather(String token, Date startDay, Date endDay, String weather);

    /**
     * 天气流量分析-按天气统计平均流量、拥堵
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param areaId   区域ID
     * @return List &lt; WeatherFlowDto &gt;
     */
    public ResultPojo avgKeyAreaFlowByWeather(String token, Date startDay, Date endDay, String weather, String areaId);


    /**
     * 天气流量分析-按天气统计平均流量、拥堵
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param roadId   路段ID
     * @return List &lt; WeatherFlowDto &gt;
     */
    public ResultPojo avgKeyRoadFlowByWeather(String token, Date startDay, Date endDay, String weather, String roadId);

    /**
     * 不同天气下的分时流量-按路段查询
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param roadId   路段ID
     * @return List &lt; WeatherTrendDto &gt;
     */
    public ResultPojo weatherKeyRoadTrendAnalysisByHour(String token, Date startDay, Date endDay, String weather, String roadId);

    /**
     * 不同天气下的分时流量-按区域查询
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param areaId   区域ID
     * @return List &lt; WeatherTrendDto &gt;
     */
    public ResultPojo weatherKeyAreaFlowTrendAnalysisByHour(String token, Date startDay, Date endDay, String weather, String areaId);

    /**
     * 不同天气下的卡口流量排行
     *
     * @param token
     * @param startDay
     * @param endDay
     * @param weather  天气
     * @param num      取前num条
     * @return List &lt; FlowByPointDto &gt;
     */
    public ResultPojo topFlowPointByWeather(String token, Date startDay, Date endDay, String weather, int num);


/////////////////////天气流量分析：end//////


/////////////////////大货车分析：begin//////

    /**
     * 大货车分析-获取区域大货车总数
     *
     * @param token
     * @param areaId   区域ID
     * @param startDay
     * @param endDay
     * @return FlowWithBigTrackDto
     */
    public ResultPojo statAreaFlowWithBigTruck(String token, String areaId, Date startDay, Date endDay);

    /**
     * 大货车分析-区域出行趋势查询查询  按小时
     *
     * @param token
     * @param areaId   区域ID
     * @param startDay
     * @param endDay
     * @return List &lt; FlowWithBigTrackDto &gt;
     */
    public ResultPojo trendAreaFlowWithBigTruckByHour(String token, String areaId, Date startDay, Date endDay);

    /**
     * 大货车分析-区域出行趋势查询查询  按天
     *
     * @param token
     * @param areaId   区域ID
     * @param startDay
     * @param endDay
     * @return List &lt; FlowWithBigTrackDto &gt;
     */
    public ResultPojo trendAreaFlowWithBigTruckByDay(String token, String areaId, Date startDay, Date endDay);

/////////////////////大货车分析：end//////
}
